package com.coderly.onlinegallerysharingplatform.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.coderly.onlinegallerysharingplatform.common.response.Response;
import com.coderly.onlinegallerysharingplatform.model.dao.entity.SpaceDO;
import com.coderly.onlinegallerysharingplatform.model.dao.entity.SpaceUserDO;
import com.baomidou.mybatisplus.extension.service.IService;
import com.coderly.onlinegallerysharingplatform.model.dto.req.space.CreateSpaceReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.req.space.DeleteSpaceReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.req.space.EditSpaceReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.req.space.QuerySpaceReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.req.spaceuser.AddSpaceUserReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.req.spaceuser.DeleteSpaceUserReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.req.spaceuser.EditSpaceUserReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.req.spaceuser.GetSpaceUserReqDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.resp.space.SpaceRespDTO;
import com.coderly.onlinegallerysharingplatform.model.dto.resp.spaceuser.SpaceUserRespDTO;

import java.util.List;

/**
* @author 26788
* @description 针对表【t_space_user(空间用户关联)】的数据库操作Service
* @createDate 2025-03-23 15:23:59
*/
public interface SpaceUserService extends IService<SpaceUserDO> {

    /**
     * 添加空间成员
     * @param
     */
    Long addSpaceUser(AddSpaceUserReqDTO addSpaceUserReqDTO);

    /**
     * 检验空间成员
     */
    void validSpaceUser(SpaceUserDO spaceUserDO, boolean isAdd);

    /**
     * 实体类转包装响应类（单条）
     */
    SpaceUserRespDTO getSpaceUserRespDTO(SpaceUserDO spaceUserDO);

    /**
     * 实体类转包装响应类（列表）
     */
    List<SpaceUserRespDTO> getSpaceUserRespDTOList(List<SpaceUserDO> spaceUserDOList);

    /**
     * 构建查询Wrapper
     */
    QueryWrapper<SpaceUserDO> buildSpaceUserQueryWrapper(GetSpaceUserReqDTO getSpaceUserReqDTO);


    /**
     * 删除空间成员
     * @param deleteSpaceUserReqDTO
     * @return
     */
    Response<Boolean> deleteSpaceUser(DeleteSpaceUserReqDTO deleteSpaceUserReqDTO);

    /**
     * 编辑空间成员
     * @param editSpaceUserReqDTO
     * @return
     */
    Response<Boolean> editSpaceUser(EditSpaceUserReqDTO editSpaceUserReqDTO);
}
